#include "singlenewdictelementdialog.h"
#include "ui_singlenewdictelementdialog.h"
#include <QtSql>
#include <QMessageBox>

SingleNewDictElementDialog::SingleNewDictElementDialog(const QString &dictName, QWidget *parent, int id, const QString &name) :
    QDialog(parent),
    m_ui(new Ui::SingleNewDictElementDialog), id(id), name(name)
{
    m_ui->setupUi(this);
    setDictName(dictName);
    if (id == -1)
        setWindowTitle(QObject::tr("Добавление новой записи в справочник \"%1\"").arg(dictName));
    else
        setWindowTitle(tr("Редактирование записи \"%1\" справочника \"%2\"").arg(name).arg(dictName));
    m_ui->leName->setText(name);
}

SingleNewDictElementDialog::~SingleNewDictElementDialog()
{
    delete m_ui;
}

void SingleNewDictElementDialog::changeEvent(QEvent *e)
{
    QDialog::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        m_ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void SingleNewDictElementDialog::setDictName(const QString &str){
    m_ui->label->setText(QString("Название нового элемента справочника %1")
                         .arg(str) );
}

bool SingleNewDictElementDialog::insertRecord()
{
    QSqlQuery query;
    query.prepare( QString("INSERT INTO %1 (name) VALUES (\"%2\")")
                   .arg(table)
                   .arg(m_ui->leName->text()) );
    if (!query.exec()) {
        QMessageBox::warning(this,tr("Ошибка при добавлении в БД!"),
                              tr("Не удалось добавить запись!)") +"\nError: " +query.lastError().text() +"\n" +query.lastQuery(),
                              QMessageBox::Ok, QMessageBox::Ok);
        return 0;
    }
    return 1;
}

void SingleNewDictElementDialog::accept()
{
    bool updated = false;
    if (id == -1)
        insertRecord();
    else {
        if (name != m_ui->leName->text()) {
            if (QMessageBox::question(this, tr("Измениение записи"),
                                      tr("Вы действительно хотите изменить изменить запись?"),
                                      QMessageBox::Yes | QMessageBox::No,
                                      QMessageBox::No) == QMessageBox::Yes)
                updated = updateRecord();
        }
    }
    if (updated) {
        this->hide();
        this->setResult(QDialog::Accepted);
    }
}

void SingleNewDictElementDialog::setTableName(const QString tableName)
{
    table = tableName;
}

bool SingleNewDictElementDialog::updateRecord()
{
    QSqlQuery query;
    query.prepare(QString("UPDATE %1 SET name = \"%2\" WHERE id = %3")
                  .arg(table)
                  .arg(m_ui->leName->text())
                  .arg(id) );
    if (!query.exec()) {
        QMessageBox::warning(this, tr("Ошибка при изменении записи!"),
                             tr("Не удалось изменить запись!") +"\nError: " +query.lastError().text() +"\n" +query.lastQuery(),
                             QMessageBox::Ok, QMessageBox::Ok);
        return 0;
    }
    return 1;
}







